#include"httplib.h"
void Hello(const httplib::Request &req,httplib::Response &rsp)
{
    rsp.set_content("hello world!","text/plain");//设置正文内容和类型
    rsp.status=200;//设置状态码
}

void Numbers(const httplib::Request &req,httplib::Response &rsp)
{
    //请求里面的数字被保存在req.matches[1]，调用它就能获取它    
    auto num= req.matches[1];//matches[0]里面保存的是完整路径，往后下标中保存的都是捕捉的数据
    rsp.set_content(num,"text/plain");//设置正文内容和类型,注意这里num是字符串类型
    rsp.status=200;//设置状态码
}
void Multipart(const httplib::Request &req,httplib::Response &rsp)
{
    auto ret=req.has_file("file");//判断是否有文件存在
    if(ret==false)//req没有文件存在
    {
        std::cout<<"not file upload\n";
        rsp.status=400;
        return ;
    }
    const auto& file=req.get_file_value("file");//拿到保存在req的具体文件信息
    rsp.body.clear();//清空响应的报文
    rsp.body+=file.filename;//拼接文件名称
    rsp.body+="\n";
    rsp.body+=file.content;//文件内容
    rsp.set_header("Content-Type","text/plain");
    rsp.status=200;
    return ;
}
int main()
{
    httplib::Server server;//实例化Server类型的对象
    server.set_base_dir("./wwwroot");

    server.Get(R"(/hi)",Hello);//注册针对一个/hi的Get请求的处理函数映射关系
                        //正则表达式的用法
    server.Get(R"(/numbers/(\d+))",Numbers);//注册针对/numbers/数字的请求处理函数映射关系
    server.Post(R"(/multipart)",Multipart);//注册多文件上传的处理函数
    server.listen("0.0.0.0",8888);
    return 0;
}